package com.loop.homework;

import java.util.*;

public class Homework {
    public static void main(String[] args) {


    }
    /**
     * 1. 已知数组存放一批号码，号码最长为11位，最短为5位
     *
     * String[] strs = {"12345","67891","12347809933","98765432102","67891","12347809933"}。
     *
     * 将该数组里面的所有qq号都存放在合适的集合中，重复QQ号不存储，将集合中所有元素使用迭代器和for循环两种遍历方式打印出来。
     */
    public static void demo1(){
        String[] strs = {"12345","67891","12347809933","98765432102","67891","12347809933"};
        HashSet<String> set = new HashSet<>();
        for (int i = 0; i < strs.length; i++) {
            set.add(strs[i]);
        }
        Iterator<String> iterator = set.iterator();
        while (iterator.hasNext()){
            System.out.print(iterator.next()+" ");
        }
        System.out.println();
        for (String s:set) {
            System.out.print(s+" ");
        }
    }

    /**
     * 2. 双色球规则：双色球每注投注号码由6个红色球号码和1个蓝色球号码组成。
     *
     * 红色球从1—33中随机生成6个不重复的号码；蓝色球号码从1—16中随机生成1个；
     *
     * 客户通过键盘录入购买的红色球6个(不重复)和蓝色球1个, 判断客户的中奖状况:
     *
     *   1) 买中蓝色球, 红色球全部买中, 1等奖 100万
     *
     *   2) 买中蓝色球,红色球买中3-5个, 2等奖50万
     *
     *   3) 买中蓝色球, 红色球买中1个, 3等奖20万
     *
     *   4) 其余情况全部算作没有中奖
     *
     * 注意: 红球买中顺序也作为判断是否中奖的依据
     */
    public static int demo2(){
        //生成中奖红球
        Random random = new Random();
        LinkedHashSet<Integer> set = new LinkedHashSet<>();
        for (int i = 0; i < 6; i++) {
            boolean flag = set.add(random.nextInt(32) + 1);
            if (!flag){
                i--;
            }
        }
        System.out.print("红");
        System.out.println(set);
        //蓝球的号码
        int blue = random.nextInt(16)+1;
        System.out.println("蓝"+blue);
        //要求玩家输入要买入的球号
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入买入蓝球的号码（1-16）：");
        int guessBlue = scanner.nextInt();
        //用list将玩家买入的球号存起来
        LinkedHashSet<Integer> linkedHashSet = new LinkedHashSet<>();
        for (int i = 0; i < set.size(); i++) {
            System.out.println("请输入第"+i+"个买入蓝球的号码（1-33）：");
            int guessRed = scanner.nextInt();
            boolean flag = linkedHashSet.add(guessRed);
            if (!flag){
                System.out.println("请不要买重复的谢谢");
                i--;
            }
        }

        //判断蓝球有没有中奖
        if (blue != guessBlue){
            System.out.println("很遗憾未中奖");
            return 0;
        }
        //遍历中奖的球
        int count = 0;
        ArrayList<Integer> targetList = new ArrayList<>();
        for (Integer i :set) {
            targetList.add(i);
        }

        ArrayList<Integer> guessList = new ArrayList<>();
        for (Integer i :linkedHashSet) {
            guessList.add(i);
        }
        System.out.println(targetList);
        System.out.println(guessList);

        for (int i = 0; i < targetList.size(); i++) {
            if (targetList.get(i)==guessList.get(i)){
                count++;
            }else {
                break;
            }
        }
        System.out.println(targetList);
        System.out.println(guessList);
        //index表示买中红球的个数
        System.out.println(count);
        return count;
    }

    /**
     * 3.分析以下需求，并用代码实现：
     *
     * 	(1)定义数字字符串集合{"010","3223","666","7890987","123123"}
     *
     * 	(2)判断该数字字符串数组中的数字字符串是否是对称(第一个数字和最后一个数字相等，第二个数字和倒数第二个数字是相等的，依次类推)，并逐个输出
     *
     * 	(3)如：010 是对称的，3223 是对称的，123123 不是对称的
     *
     * 	(4)最终打印该集合中对称字符串的个数
     */
    public static void demo3(){
        String[] strs = {"010","3223","666","7890987","123123"};
        List<String> list = Arrays.asList(strs);
        int count = 0;
        for (String s:list) {
            if (isSymmetric(s)){
                System.out.println(s+"是对称的");
                count++;
            }
        }
        System.out.println("对称的字符串有"+count+"个");
    }

    public static boolean isSymmetric(String str){
        char[] c = str.toCharArray();
        for (int i = 0; i < c.length/2; i++) {
            int size = c.length;
            if (c[i]!=c[size-i-1]){
                return false;
            }
        }
        return true;
    }
}
